package main

import "fmt"

func main() {
	list := []int{1, 2, 3, 4, 5, 6, 7}
	rotate(list, 3)
	fmt.Println(list)
}

// 转轮数组
// https://leetcode.cn/problems/rotate-array/?envType=study-plan-v2&envId=top-interview-150
func rotate(nums []int, k int) {
	// 从 i = 0 开始 放到 i+k, 原有位置的数字 继续放
	l := len(nums)
	k = k % l
	times := 0 //迁移了多少个数
	for i := 0; i < l; i++ {
		newPos := (i + k) % l //当前数的新位置
		val1 := nums[i]
		for {
			val2 := nums[newPos] //保存住这个位置的数字
			nums[newPos] = val1
			val1 = val2 //下一次需要处理的数

			cPos := newPos            //当前处理完的数
			newPos = (newPos + k) % l // 下一次需要处理的位置
			times++

			if i == cPos {
				break //说明又处理到第一个了
			}
		}
		if times >= l {
			break
		}
	}
}
